#coding=utf-8

require "aio/core"

class Aio::Module::Cmd::H3C::DisplayIpRoutingStat < Aio::Module::Cmd::H3C
	include Aio::Module

	def initialize
		super({
			:cmd_full 	=> "display ip routing-table statistics",
			:cmd_short 	=> "dis ip rout stat",
			:author 		=> "Elin",
			:description 	=> "This is H3C Command# display ip routing-table statistics", 
			:ranking		=> Ranking_1,
			:platform 	=> "all",
			:benchmark 	=> {}
		})
	end

	def parse
		cont = self.context.dup
		stat = {}
		useful[:route_summary] = stat

		#cont.readline_match_block(/Proto route active added deleted freed/)
		cont.readline_match_block(/DIRECT (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
			stat_dir = {}
			stat[:direct] = stat_dir
			block.update(stat_dir, :route)
			block.update(stat_dir, :active)
			block.update(stat_dir, :added)
			block.update(stat_dir, :deleted)
			block.update(stat_dir, :freed)
		end
		cont.readline_match_block(/STATIC (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
			stat_sta = {}
			stat[:static] = stat_sta
			block.update(stat_sta, :route)
			block.update(stat_sta, :active)
			block.update(stat_sta, :added)
			block.update(stat_sta, :deleted)
			block.update(stat_sta, :freed)
		end
		cont.readline_match_block(/RIP (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
			stat_rip = {}
			stat[:rip] = stat_rip
			block.update(stat_rip, :route)
			block.update(stat_rip, :active)
			block.update(stat_rip, :added)
			block.update(stat_rip, :deleted)
			block.update(stat_rip, :freed)
		end
		cont.readline_match_block(/OSPF (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
			stat_ospf = {}
			stat[:ospf] = stat_ospf
			block.update(stat_ospf, :route)
			block.update(stat_ospf, :active)
			block.update(stat_ospf, :added)
			block.update(stat_ospf, :deleted)
			block.update(stat_ospf, :freed)
		end
		cont.readline_match_block(/IS-IS (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
			stat_isis = {}
			stat[:isis] = stat_isis
			block.update(stat_isis, :route)
			block.update(stat_isis, :active)
			block.update(stat_isis, :added)
			block.update(stat_isis, :deleted)
			block.update(stat_isis, :freed)
		end
		cont.readline_match_block(/BGP (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
			stat_bgp = {}
			stat[:bgp] = stat_bgp
			block.update(stat_bgp, :route)
			block.update(stat_bgp, :active)
			block.update(stat_bgp, :added)
			block.update(stat_bgp, :deleted)
			block.update(stat_bgp, :freed)
		end
		cont.readline_match_block(/Total (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
			stat_total = {}
			stat[:total] = stat_total
			block.update(stat_total, :route)
			block.update(stat_total, :active)
			block.update(stat_total, :added)
			block.update(stat_total, :deleted)
			block.update(stat_total, :freed)
		end
	end
end
